Search Results: "robot101"

9 November 2008

Simon McVittie: Spec-writing On A Plane

(Written on Friday 16th, posted on Monday)

As I write this, I'm on a plane off the coast of the Netherlands, on the way back from a couple of days designing APIs with Rob McQueen and the RTCom people at NRC Helsinki (who we work with on the chat and VoIP functionality for Nokia internet tablets).

We've had a very useful couple of days, mainly designing the next-generation channel requesting and dispatch API for Telepathy (the same APIs I've been doing preparatory work for on the Telepathy mailing list in the last couple of weeks). API sketches for review and comment are either on are on Merge Monkey or on the way there.

Before even reaching Nokia, Rob and I did a lot of design on the plane over to Helsinki, and I took some notes: here they are, by way of a glimpse at how the Telepathy design process works when we don't have a whiteboard[1] :-)

  • Geoloc looks good in principle, needs some more work
    • add more docstrings
    • add a way to ask people for uncached info (RequestLocations)
    • move access control to Co.I.Presence, call it RichPresenceAccessControl?
  • DeliveryReporting looks good, ish
    • improve wording of delivery-echo and rationale
    • when sending a delivery report, add a reason for the status (using Channel_Text_Send_Error?)
  • Uniqueness requirement for (channel, handle_type != 0, handle) is in the way - let's drop it
  • MSN should use "authentic" 1-1 chats, and use Ch.I.UpgradeableToRoom (name tbd) to migrate the underlying switchboard to be a room
  • XMPP should use Ch.I.UpgradeableToRoom too, but the 1-1 channel may also stay open
  • Mutable handle => handle 0 must stay (for requestotron's benefit)
  • bundles ftw
  • renaming: we want SelfHandleChanged in the core
  • TpC* - add ability to subscribe to ifaces ay construct time (blocks Ready) or later
  • Dispatching: when registering a c'handler, specify everything it can handle
  • If a new bundle can be handled in its entirety by the same handler (call it 'the bundle handler'), do it. Otherwise split it up completely (there is no 'bundle handler').
  • If a channel in an existing bundle can be handled by the bundle handler, send it there, else send to the default handler.
  • Group - add SelfHandleChanged, maybe? Also Connection
  • Add HandleOwners: prop a uu , HandleOwnersChanged(a uu , au)
  • Use TargetHandleType, TargetHandle
  • Stringified initiator handle as a separate property
  • Maybe even a FirstMessage property, although this stretches the definition of "immutable"
  • org.freedesktop.Telepathy.Client interface

Nokia's Mikhail Zabaluev kindly took notes for some further discussion we had with him and Alberto Mardegan about the dispatch API, which he already posted to the mailing list.

We hope this API will make it possible to integrate Telepathy into the desktop better - it should make it a lot easier to share connections between processes in a useful way and hand out incoming channels to the appropriate handlers, which was always a major goal for Telepathy. It should also let us and others implement exciting new notification mechanisms (hi to the people on IRC and the mailing list wanting to patch their media players to integrate with Telepathy! :-)
[1]When we do have a whiteboard, the design process is: "Robot101 scribbles on a whiteboard, smcv writes down <tp:rationale> elements"

Simon McVittie: Implementing D-Bus services with telepathy-glib

(Part 1 of an ongoing series: shiny things in telepathy-glib)
16:46 < epmf> tp-glib is made of magic

—#telepathy, 2008-04-15

Rob pointed out today that I'd been promising to blog about telepathy-glib for several months and still haven't done so. I think there's too much to cover in one blog post, so I'll start with the oldest part - implementing a service (typically a Telepathy connection manager).

While telepathy-glib is (obviously) intended for Telepathy implementors, I think the ideas we've been implementing are likely to be useful for any D-Bus API, particularly flexible/complex APIs where an object implements many interfaces.

Introduction to telepathy-glib telepathy-glib started out as a collection of code extracted from our XMPP connection manager, telepathy-gabble, but at some point it grew beyond that into a wrapper around/partial replacement for dbus-glib. We've been quite pleased with it, really :-) My first major round of work on telepathy-glib, during the first half of 2007, was to split it out from telepathy-gabble (versions up to 0.5.9 were released as part of Gabble 0.5.x tarballs, in fact), leading to the release of the 0.6.x stable branch in late September. This was very helpful for implementing connection managers - Salut, Idle and telepathy-sofiasip (our connection managers for link-local XMPP, IRC and SIP) all started off by forking/cargo-culting from Gabble, and achieved huge code reductions by porting to telepathy-glib. Also, Will Thompson used it in his Summer of Code project, telepathy-haze, to go from nothing to a working and useful Telepathy implementation based on libpurple in a matter of a few months. The second major round of work, which I'll discuss in a later article, added client code to telepathy-glib, obsoleting the older/worse libtelepathy and allowing client programs like Empathy and telepathy-stream-engine to be written using telepathy-glib. In the process, I accidentally reinvented DBusGProxy :-) More details to come later!
Some background: service-side code generation
The secret Collabora code-generation process

(credit: daf)

Supporting D-Bus in the GObject world has always involved quite a lot of code generation. The core API of dbus-glib is heavily reliant on varargs functions, which aren't type-safe and are easy to get wrong. dbus-glib contains a program called dbus-binding-tool, which is meant to generate reasonably sane GObject APIs for D-Bus objects. Unfortunately, it seems to be intended to generate a whole GObject at a time. Early versions of telepathy-gabble used dbus-binding-tool plus a script called gengobject.py to generate API stubs for the exported objects; developers then filled in the blanks, and hey presto, we had a GObject on D-Bus. This was fine up to a point, but had a couple of major drawbacks. Whenever we changed the D-Bus API (quite common during the early development of Telepathy), there was a very laborious and error-prone merging process. We ended up with the following process:
  • copy the D-Bus introspection XML from the telepathy-spec repository into a directory xml/pristine (actually, the canonical form for the spec was Python for a while, and we had a script that exported a contrived object onto D-Bus and introspected itself to get the XML - but that's another story!)
  • preprocess the introspection XML to add the dbus-glib CFunctionName annotation, resulting in a directory xml/modified
  • run dbus-binding-tool and a Python script gengobject.py to generate C source in xml/src
  • three-way-diff the old version of xml/src, the new version of xml/src, and the real C code in src to create a new version of src
  • pray that the diff process hadn't randomly exchanged functions' implementations
  • update the resulting code in src so it worked
  • check the whole mess back into darcs
  • hope that nobody else had made changes that would result in darcs conflicts
If you haven't yet gathered, this was a bit of a nightmare. Also, it was very easy to return the wrong thing from a method without noticing - because all the APIs were varargs, the compiler didn't notice, and the first we'd know about it was a mysterious segfault under certain circumstances.
How telepathy-glib fixes code generation telepathy-glib improves on this by taking advantage of this innocuous-looking feature in dbus-glib:
commit 355ef78d98d6fc65715845d56232199162cab12a
Author: Steve Fr cinaux <steve istique net>
Date:   Thu Aug 17 11:48:20 2006 +0200
    Interface support for bindings.
Instead of running dbus-binding-tool or creating GObjects with D-Bus interfaces, we put the entire Telepathy spec through glib-ginterface-gen.py, a distant descendant of Gabble's gengobject.py. For each interface in the spec, we generate a GInterface that mirrors the D-Bus interface. Any GObject that implements the GInterface automatically gets the D-Bus interface if it's exported onto D-Bus. There are a few non-obvious refinements, though:
  • The signature of the method implementation is always in the mode that dbus-glib calls "asynchronous", where the method implementation can either send a reply message before or after it returns. For "slow" methods, this is the only thing you can do. For instance, many Telepathy D-Bus methods can't return anything until some TCP round-trips to the server have happened. This is also the only thing you can do if you want to extract extra information, like the sender's unique name, from the method-call message (dbus-glib's "synchronous" API doesn't allow this to be done). For "fast" methods, sending a reply message before returning is just as easy as using the "synchronous" API (it's just a difference of syntax), and has an API consistent with that of the "slow" methods, making it easier for service authors.

  • The layout of the GInterface vtable is private, and (auto-generated) accessor functions are used to fill in implementations. This means our ABI doesn't change just because we re-ordered functions in the spec.

  • If no implementation is provided for a method, we just raise an appropriate error (org.freedesktop.Telepathy.Errors.NotImplemented), rather than suffering an assertion failure. This means we can safely add methods to an interface.

  • While we're generating code anyway, we generate some static inline wrapper functions which wrap dbus_g_method_return(), to have type-safe method returns. You can easily check that a method replies with correct types, by checking that the implementation of Foo() replies by calling tp_svc_some_interface_return_from_foo().

  • Similarly, we generate wrapper functions to emit signals, to get type-safe signal emission.

Not all interfaces are stable enough to be included in telepathy-glib's stable API and ABI, so some of our other projects include a copy of the telepathy-glib code-generation tools, and generate their own "mini-telepathy-glib" (traditionally in a /extensions/ directory) for their implementation-specific (drafts of) interfaces. This isn't yet as polished as it ought to be (mainly because we don't want to freeze the augmented-introspection-XML format that we write the Telepathy spec in, because it's rather ad-hoc and hackish in places) but it works quite well in practice. To see what this looks like in practice, have a look at the examples in telepathy-glib, or at a Telepathy connection manager like telepathy-gabble.
Mixins and base classes Another feature of telepathy-glib which makes life easier for connection manager authors is that it provides "mixins" and base classes which implement some of the GInterfaces. There's absolutely nothing magic about the base classes - they don't have any access to private implementation details of the GInterfaces, they just implement them like everyone else does. The "mixins" are only slightly more magical - they store some extra state inside the structures representing GObjects and their classes, and use it to provide default implementations of some or all of the methods on a particular interface (or two interfaces, in the case of the new TpMessageMixin). I'll leave it up to Rob to explain those in greater detail, since I seem to remember that he invented them :-P The examples and regression tests in telepathy-glib are quite good examples of how these work in practice.

Simon McVittie: Integrating Enemies of Carlotta with Postfix

From the "doing sysadmin over wobbly 3G while waiting for our plane to be allowed to take off" department comes this bit of mailing list setup. By his own admission, Rob is better at configuring Postfix than he is at making blog posts, so I get to be the one posting this...
09:58 <@Robot101> my postfix -> eoc integration is basically ninja, if I might 
                  say so myself
09:58 <@Robot101> so, an eoc transport in master.cf:
09:58 <@Robot101> eoc       unix  -       n       n       -       10      pipe 
                  user=list argv=/usr/bin/enemies-of-carlotta --quiet 
                  --incoming --sender=$ sender  --recipient=$ recipient 
09:59 <@Robot101> then in main.cf:
09:59 <@Robot101> eoc_destination_recipient_limit = 1
09:59 <@Robot101> virtual_mailbox_domains = lists.collabora.co.uk
09:59 <@Robot101> virtual_mailbox_maps = pcre:/etc/postfix/list_transports
09:59 <@Robot101> transport_maps = pcre:/etc/postfix/list_transports
09:59 <@Robot101> then a script/cron:
09:59 <@Robot101> su -c "enemies-of-carlotta --show-lists" list   sed 
                  's,\(.*\)@\(.*\),/^\1(-[^@]*)?@\2$/ eoc,' 
                  >/etc/postfix/list_transports
09:59 <@Robot101> giving list_transports like this:
09:59 <@Robot101> /^test(-[^@]*)?@lists.collabora.co.uk$/ eoc
09:59 <@Robot101> (thanks to smcv for assistance with regexp-generation regexp)
...
10:01 <@wjt> ten points for using the best -named mlm
10:01 <@Robot101> 2000 points for not having a mailing list system held 
                  together with procmail, shell, duct tape, gash and string

10 July 2008

Robert McQueen: GUADEC, Telepathy and a Party on a Boat

For everyone at GUADEC, there’s a boat party sponsored by Collabora this evening. Our sponsorship was confirmed after the program was printed so it’s listed anonymously, but it’s mostly sponsored by Collabora, of course with huge thanks to Baris and his team for the organisation, and local sponsors for food and discounted beer. The boat leaves from Kabatas at 9pm today (Thursday). It’s actually pretty close to the 3rd anniversary of Collabora’s incorporation, so I think we could call this our birthday party. :D I gave my presentation earlier today about using Telepathy to make collaborative applications. My slides are available, as well as the apps I demoed, which are the python VNC demo based on telepathy-python’s examples, Elliot’s Tic Tac Tube game, and Guillaume and Alban’s quick hack to Empathy and Vinagre to share your desktop over a stream tube. I was followed up by Senko’s presentation (slides also available) which had an overview of the libraries and APIs currently available to embed Telepathy functionality in applications on the desktop. The talks were all recorded so hopefully some videos will turn up on-line too. Speaking about collaborative stuff with Telepathy, we’re really keen to hear from the authors of applications like Abiword, Inkscape, Vinagre, Jokosher, Tomboy, Gobby, etc, to find out how we can help you integrate with Telepathy, what features you need before you can get started, or just try and convince you that it’s a good idea. :) If you’re at GUADEC, come and grab one of the Collaborans or drop by on #telepathy on FreeNode and tell us what you’d like to do and how we can help. Yesterday after the talks on Soylent and the People project, Travis and I met up with the guys behind the People project (Ali Sabil and Johann Prieur) and some of the Online Desktop team (Owen Taylor and Marina Zhurakhinskaya). We sketched out a way of plugging together Telepathy, People, Soylent and the Online Desktop to deal a lot better with meta-contacts on the desktop, providing “first-class” people objects. It all looks pretty promising and hopefully we’ll all find some time to make moves towards our vision. This afternoon at 3:30pm, Olivier is also presenting our work on Farsight 2, which is really cool stuff and should include some exciting demos of the multi-person video conferencing stuff we’ve been doing. More generally, GUADEC is awesome. I’m having a great time in Istanbul (despite it being pretty hot for a pale-faced Brit like me), and enjoying the sights and sounds of such an interesting city and culture. I’ve caught up with many of the usual suspects (like Lennart, who never turns down the chance to turn up at a conference and sample the local bars and clubs), and had some great discussions.

8 June 2008

Robert McQueen: Xen virtual interfaces with more than one IP

I’ve got a load of boxes running Debian etch with Xen 3.0.3 with routed networking (rather than bridged, so I can do iptables and reverse path filtering etc in dom0). Since upgrading from Xen 2.x many moons ago, I’ve not known how to configure one virtual interface to have more than one IP. In the meantime, I’ve ended up doing nonsense like providing a VM with two interfaces just to give it two IPs. However, this interacts really badly with reverse path filtering unless you do a bunch of source-routing rocket science in the domU to send out through the right vif. So, I looked at the vif-route script and it seems to support iterating through a space-separated list of IPs, but I was totally unable to find any documentation or mailing list posts explaining how to format the IPs within the formerly-Python key/value Xen domain config file syntax. After a while playing with the parser and various levels of quoting, I found that actually, the correct amount of quoting is none at all, and also uncovered a bug in another script which prevents it from working correctly. In the hope that this might help others using Google and trying to achieve the same as me, here is my recipe for configuring Xen vif devices to have multiple IPs (note that I think this might be specific to Xen 3.0.x, as I believe 3.2.x introduces config files in the S-expression format which is what xenstore uses internally):
  1. Configure your VM using this surprisingly obvious, but somewhat dubious syntax (including a second argument just to prove that yes, it really does work like that):

    vif=['ip=1.2.3.4 5.6.7.8, mac=00:16:3e:01:23:45']

    When parsed into SXP by xm create, this sets the ip value correctly as a space separated list as the scripts expect:

    (device (vif (ip '1.2.3.4 5.6.7.8') (mac 00:16:3e:01:23:45)))
  2. Fix the bug in /etc/xen/scripts/vif-common.sh:

    --- /etc/xen/scripts/vif-common.sh~ 2008-06-09 01:14:23.065065119 +0100
    +++ /etc/xen/scripts/vif-common.sh 2008-06-09 01:11:06.599986274 +0100
    @@ -103,7 +103,7 @@
    if [ "$ip" != "" ]
    then
    local addr
    - for addr in “$ip”
    + for addr in $ip
    do
    frob_iptable -s “$addr”
    done
  3. Set up multi-homed or aliased interfaces as normal in the domU (depending if you’re a ip or an ifconfig kinda guy).
  4. Profit!

5 June 2008

Robert McQueen: Surstr mming

In the office, Christian has just unwrapped a very carefully packed box containing a bulging tin of Surstr mming. Apparently due to the “unique” smell you have to open it outside, and he’s invited people to come to his house to try it. Now, I’m not keen on various types of fish even at the best of times, so add a year or so of fermentation, and I am very, very scared. In unrelated news, some people in the office have decided to take up vegetarianism.

18 April 2008

Robert McQueen: Lazyweb request: gadgets I would like to have

Last night I thought of a few gadgets which I’d like to have, and although I’m pretty sure you should be able to get hold of them, I had trouble finding anything that looked quite right: So, answers on a postcard…

16 April 2008

Simon McVittie: Implementing D-Bus services with telepathy-glib

16:46 < epmf> tp-glib is made of magic

—#telepathy, 2008-04-15

Rob pointed out today that I'd been promising to blog about telepathy-glib for several months and still haven't done so. I think there's too much to cover in one blog post, so I'll start with the oldest part - implementing a service (typically a Telepathy connection manager).

While telepathy-glib is (obviously) intended for Telepathy implementors, I think the ideas we've been implementing are likely to be useful for any D-Bus API, particularly flexible/complex APIs where an object implements many interfaces.

Introduction to telepathy-glib telepathy-glib started out as a collection of code extracted from our XMPP connection manager, telepathy-gabble, but at some point it grew beyond that into a wrapper around/partial replacement for dbus-glib. We've been quite pleased with it, really :-) My first major round of work on telepathy-glib, during the first half of 2007, was to split it out from telepathy-gabble (versions up to 0.5.9 were released as part of Gabble 0.5.x tarballs, in fact), leading to the release of the 0.6.x stable branch in late September. This was very helpful for implementing connection managers - Salut, Idle and telepathy-sofiasip (our connection managers for link-local XMPP, IRC and SIP) all started off by forking/cargo-culting from Gabble, and achieved huge code reductions by porting to telepathy-glib. Also, Will Thompson used it in his Summer of Code project, telepathy-haze, to go from nothing to a working and useful Telepathy implementation based on libpurple in a matter of a few months. The second major round of work, which I'll discuss in a later article, added client code to telepathy-glib, obsoleting the older/worse libtelepathy and allowing client programs like Empathy and telepathy-stream-engine to be written using telepathy-glib. In the process, I accidentally reinvented DBusGProxy :-) More details to come later!
Some background: service-side code generation
The secret Collabora code-generation process

(credit: daf)

Supporting D-Bus in the GObject world has always involved quite a lot of code generation. The core API of dbus-glib is heavily reliant on varargs functions, which aren't type-safe and are easy to get wrong. dbus-glib contains a program called dbus-binding-tool, which is meant to generate reasonably sane GObject APIs for D-Bus objects. Unfortunately, it seems to be intended to generate a whole GObject at a time. Early versions of telepathy-gabble used dbus-binding-tool plus a script called gengobject.py to generate API stubs for the exported objects; developers then filled in the blanks, and hey presto, we had a GObject on D-Bus. This was fine up to a point, but had a couple of major drawbacks. Whenever we changed the D-Bus API (quite common during the early development of Telepathy), there was a very laborious and error-prone merging process. We ended up with the following process:
  • copy the D-Bus introspection XML from the telepathy-spec repository into a directory xml/pristine (actually, the canonical form for the spec was Python for a while, and we had a script that exported a contrived object onto D-Bus and introspected itself to get the XML - but that's another story!)
  • preprocess the introspection XML to add the dbus-glib CFunctionName annotation, resulting in a directory xml/modified
  • run dbus-binding-tool and a Python script gengobject.py to generate C source in xml/src
  • three-way-diff the old version of xml/src, the new version of xml/src, and the real C code in src to create a new version of src
  • pray that the diff process hadn't randomly exchanged functions' implementations
  • update the resulting code in src so it worked
  • check the whole mess back into darcs
  • hope that nobody else had made changes that would result in darcs conflicts
If you haven't yet gathered, this was a bit of a nightmare. Also, it was very easy to return the wrong thing from a method without noticing - because all the APIs were varargs, the compiler didn't notice, and the first we'd know about it was a mysterious segfault under certain circumstances.
How telepathy-glib fixes code generation telepathy-glib improves on this by taking advantage of this innocuous-looking feature in dbus-glib:
commit 355ef78d98d6fc65715845d56232199162cab12a
Author: Steve Frécinaux <steve istique net>
Date:   Thu Aug 17 11:48:20 2006 +0200
    Interface support for bindings.
Instead of running dbus-binding-tool or creating GObjects with D-Bus interfaces, we put the entire Telepathy spec through glib-ginterface-gen.py, a distant descendant of Gabble's gengobject.py. For each interface in the spec, we generate a GInterface that mirrors the D-Bus interface. Any GObject that implements the GInterface automatically gets the D-Bus interface if it's exported onto D-Bus. There are a few non-obvious refinements, though:
  • The signature of the method implementation is always in the mode that dbus-glib calls "asynchronous", where the method implementation can either send a reply message before or after it returns. For "slow" methods, this is the only thing you can do. For instance, many Telepathy D-Bus methods can't return anything until some TCP round-trips to the server have happened. This is also the only thing you can do if you want to extract extra information, like the sender's unique name, from the method-call message (dbus-glib's "synchronous" API doesn't allow this to be done). For "fast" methods, sending a reply message before returning is just as easy as using the "synchronous" API (it's just a difference of syntax), and has an API consistent with that of the "slow" methods, making it easier for service authors.

  • The layout of the GInterface vtable is private, and (auto-generated) accessor functions are used to fill in implementations. This means our ABI doesn't change just because we re-ordered functions in the spec.

  • If no implementation is provided for a method, we just raise an appropriate error (org.freedesktop.Telepathy.Errors.NotImplemented), rather than suffering an assertion failure. This means we can safely add methods to an interface.

  • While we're generating code anyway, we generate some static inline wrapper functions which wrap dbus_g_method_return(), to have type-safe method returns. You can easily check that a method replies with correct types, by checking that the implementation of Foo() replies by calling tp_svc_some_interface_return_from_foo().

  • Similarly, we generate wrapper functions to emit signals, to get type-safe signal emission.

Not all interfaces are stable enough to be included in telepathy-glib's stable API and ABI, so some of our other projects include a copy of the telepathy-glib code-generation tools, and generate their own "mini-telepathy-glib" (traditionally in a /extensions/ directory) for their implementation-specific (drafts of) interfaces. This isn't yet as polished as it ought to be (mainly because we don't want to freeze the augmented-introspection-XML format that we write the Telepathy spec in, because it's rather ad-hoc and hackish in places) but it works quite well in practice. To see what this looks like in practice, have a look at the examples in telepathy-glib, or at a Telepathy connection manager like telepathy-gabble.
Mixins and base classes Another feature of telepathy-glib which makes life easier for connection manager authors is that it provides "mixins" and base classes which implement some of the GInterfaces. There's absolutely nothing magic about the base classes - they don't have any access to private implementation details of the GInterfaces, they just implement them like everyone else does. The "mixins" are only slightly more magical - they store some extra state inside the structures representing GObjects and their classes, and use it to provide default implementations of some or all of the methods on a particular interface (or two interfaces, in the case of the new TpMessageMixin). I'll leave it up to Rob to explain those in greater detail, since I seem to remember that he invented them :-P The examples and regression tests in telepathy-glib are quite good examples of how these work in practice.

9 July 2007

Matthew Palmer: Britney Spears explains Garbage Collection

... in song, no less! And for the few people in the world who haven't seen it before, Courtney Love explains the basics of BGP.

11 May 2007

Robert McQueen: Tubes and Planets

Daf blogged earlier about some of the work we’ve done thus far for the One Laptop Per Child project. Tubes (although the picture looks more like snakes if you ask me :D) are a really cool technology which should let the OLPC activity authors just work on their activity, and use D-Bus and Telepathy to take care of the communications. At the moment our implementation for Gabble (Telepathy’s XMPP backend) is pretty rudimentary and sends all data via the server, but this already lets us layer multi-user tubes over XMPP multi-user chat rooms and have it act like a bus where each member of the room is also a D-Bus endpoint. You can export objects, call methods and emit signals just as normal. Next up we’re going to implement them in Salut (the link-local XMPP backend, which we’ll use for communications over OLPC’s mesh networking) using good old TCP for the one-to-one connections, and some of Sjoerd’s more exciting link-local multicast stuff for multi-user tubes. To make tubes work for desktop clients we’re going to go on and look at more advanced Jingle-based ICE NAT traversal stuff. Maybe one of our next ports of call should be raw stream tubes for existing TCP protocols, then we can make a reality from X over Jabber (or whatever other protocol) that Matthew Allum was wondering about. :) I’ve also just stolen Planet Collabora from Daf’s home directory and put it on its own subdomain, so you can add it to your feed readers and keep track of what we’re up to with Telepathy, Farsight and friends.

18 January 2007

Robert McQueen: LCA and hiring

I’m in Sydney for LCA 2007 this week, and this should also be my debut post on the conference planet. This is the first time I’ve made it to the other side of the world for this conference, and I’m really glad I came. It’s definitely one of the cooler conferences I’ve been to, slickly run and with an excellent programme of talks, so massive congratulations and thanks are due to the organisers and volunteers. The weather’s a stark contrast to the French Alps (I was skiing last week!), although thankfully it’s quite mild at the moment and not gotten too hot for a Pom like me. :D It’s always cool to catch up with people who I’ve not seen for a while, and put names to faces for a whole load of others I’ve not met yet. If you’re around, reading this in time, and interested in the Telepathy VOIP/IM framework, my talk is today (Friday) at 11am. If shameless bribes help, I’ve also got some funky Collabora and Telepathy shirts I need to give away before I head back to the UK. The second bit is that Collabora’s looking for a couple of people to either join us in Cambridge (UK) or work with us as a subcontractor. We’re currently doing loads of cool and totally open source stuff with IM, voice & video streaming and collaboration technologies. We’re looking for people with experience with some/many/all of C, Python, Glib/Gtk, D-Bus, GStreamer and RTP. If you’re interested, send mail to jobs( )collabora.co.uk, or if you’re around at LCA then come and find me if you want a chat.

16 December 2006

Robert McQueen: Telepathy and OLPC (part 2)

I’ve been away from the office for a couple of days, but when I got back to Cambridge, Daf and Sjoerd had some pretty cool stuff to show me: These screenshots are taken by using an environment variable to tell stream-engine just to create an xvimagesink for any call, but Daf’s writing a simple pygtk UI which handles embedding the output window into the UI properly and should make placing/receiving calls slightly less mystical. Even so, a graphical video call APP in ~150 lines of python… not too bad if you ask me. :)

12 December 2006

Robert McQueen: Telepathy and OLPC

We got an OLPC prototype at Collabora last week, and have been playing with the Telepathy VOIP/IM framework on the devices. Using telepathy-gabble’s (our XMPP backend) Jingle implementation, and telepathy-stream-engine with the Farsight GStreamer RTP library, we got a bidirectional voice/video call going pretty quickly using a few lines of python and a bit of hackery (patches to follow :D). We’re going to polish this up into an activity you can install, and also Sjoerd Simons has been working with us on telepathy-salut, an XMPP Link-Local (also known as Rendezvous, Bonjour, iChat, whatever) backend which we’re hoping to also get working as part of the OLPC platform.

9 December 2006

Matthew Garrett

The last couple of days have resulted in a number of fun things.

In other news, I hate fruitflies.

29 June 2006

Robert McQueen: Telepathy

Just a quick one, people want food: my Telepathy talk at GUADEC earlier this week was a success by most accounts, and followed up by after-hours talks today with Kai Vehmanen’s on Telepathy SIP, and Yannick Pellet on the IM/VOIP project on the 770. My slides are available for people who missed my talk, and hopefully soon Fluendo will grace us with videos feeds too. For people still around at the conference tomorrow, I’ve arranged a BOF with Martyn Russell for discussing/hacking Telepathy and Gossip stuff. It’s in the museum library room at 11am tomorrow (Friday). Hope to see you there!

25 June 2006

Robert McQueen: GUADEC and Telepathy

I made it to Vilanova on Friday for GUADEC, managed to get settled in to our chalet (I’m glad we opted for one with air conditioning!). After we got them to fix the hot water, I now think it’s pretty decent accomodation for the price, complete with wifi, swimming pool and a well-stocked shop. The only downside I can see is the distance from town. On Friday night we missed the last bus and walked in, which took over an hour and I developed a bad headache by the time we reached the town (we didn’t find the right beach, but stopped in a bar instead). My enjoyment of the walk wasn’t helped by the small children who were out on the street launching fireworks, mortars and other incendiary devices at or near us most of the way. :) Yesterday we hired bicycles to get to the town center which was certainly more fun, but there’s quite a hill on the way back. Also, bus in and taxi back is pretty much cheaper than the cost of hiring bikes here anyway, so I’m not sure I can recommend it as a long-term strategy. We might do it again for the novelty, and it has the benefit of not needing to wait around for a taxi to get back. Even before I made it to the conference venue yesterday, I’ve already met loads of cool people who hack on all sorts of cool software which I use every day, and I’ve recognised lots more people who I’ve not managed to speak to yet. I’ve also realised that we need to do a lot more work to raise the profile of the Telepathy project which I’ve been working on for almost a year now (eek!). It’s a really cool way to get IM and VoIP stuff properly integrated into the GNOME desktop, and everyone should go and check out the website, play with our releases, chat with me and come to my talk on Tuesday. Oh, and if anyone wants a Telepathy or Collabora t-shirt, grab one off me or daf. :)

4 June 2006

Tollef Fog Heen: Hackergotchi for Robot101

Since I'm impatient and Robot101 didn't respond within ten minutes of me pinging him on IRC, I'm just posting the result of his request for a hackergotchi. Robot101 Above is JPEG, but there's an XCF available too, with full transparency goodness, etc. Next time, it'd be useful to have a starting image where the head is bit more than 180x230 pixels since doing cropping and resizes and such tend to end with the image not being great. Also, my space bar is failing and I'll have to call IBM when I get home. I'm actually quite disappointed that I seem to have worn out the space bar in about a year and a half.

3 June 2006

Benjamin Seidenberg: New Anti-Spam Measures

(Sorry Robert, this is a meta-blog-post. Perhaps I should create a catagory for them?) Since being syndicated on Planet Debian, the amount of comment spam I’ve gotten has risen sharply. No spam has made it onto th site itself, since I moderate the first comment someone makes, but the emails have gotten annoying. Therefore, I put a turing test into place. Blind users will be happy to hear it’s not a CAPTCHA, instead it’s one more field to fill out that asks a very basic math question to prevent spambots from commenting. Users who registered back when I required it won’t even get the field, isn’t that nice?
To the readers of Planet Debian who are probably asking “Why Do I Care?”: If you don’t mind, try out the system to make sure it works. I figure the readership of that site will have a fairly diverse set of browsers and maybe even a few using accessibility ehancements that can confirm that the system has no problems. If you encounter any problems, email me at astronut@dlgeek.net or ping me on IRC (astronut on both freenode and oftc).

2 June 2006

Robert McQueen: Meta-blogging

In the office just now, daf complained at me that he finds it very annoying when people blog about how they havn’t blogged recently. I apologise, although in my defence, the post was mainly about C (I’ve subsequently learnt that -Wextra will warn me about such errors in future, thanks :D). The question is, is this post also annoying because of this meta-blogging property, or can it be excused as meta-meta-blogging? Although, whilst I am talking about my blog, I found that Ross Burton took a reasonable picture of me at FOSDEM (I’m the one on the left, versus Iain Holmes on the right :D), which I’ve cribbed for my photo on the GUADEC speakers list. I was wondering if in exchange for beer (or cake), anyone would like to make me a hackergotchi for my various Planet appearances? I’ve decided with mjg59 that when referring to Web 2.0, the correct pronounciation of RSS is ‘arse‘ (linked to the definition for people to might spell that word wrongly ;), leading to witty concepts such as ‘arse feeds’, ‘arse readers’, etc. It amused us in the pub anyway.

1 June 2006

Robert McQueen: if (n00b); warning

I wasted a non-trivial amount of time yesterday debugging code in which I’d accidentally written:
if (...);
   
    ...
   
Is there any situation where if (foo); can achieve something which just foo; couldn’t? Could the compiler not warn about a conditional that contained no code? Aggravating lapses in competence aside, I’ve realised I’ve not blogged for months, so over the next few days I’m going to try and write a little about what I’ve been working on recently.

Next.

Previous.